home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
libs
/
dignet_2_1.lha
/
dignet
/
dignetterm
/
source
/
Startup.asm
< prev
Wrap
Assembly Source File
|
1997-01-08
|
7KB
|
526 lines
*****************************************************************************
* "Startup.asm"
*
* $VER: Startup_asm stripped version 3.9 (10.10.96)
*
* Copyright © 1995,1996 by Kenneth C. Nilsen/Digital Surface
* This source is freely distributable.
*
* For instructions read the Startup_Asm.guide or the Startup_example.s
*
*****************************************************************************
zyxMax = 17 ;max no. of libraries
zyxBufZ = 308 ;format buffer size
Return: Macro
moveq #\1,d0
rts
EndM
DefLib: Macro
lea \1NamX(pc),a1
move.l a1,(a5)+
move.l a1,zyxNx
moveq #\2,d0 ;if you use ver >127, change this to "move.l"
move.l d0,(a5)+
move.l d0,zyxVx
jsr -552(a6)
move.l d0,(a5)+
move.l d0,\1basX
bne.b \1zyx
bsr.w zyxLibR
bra.b \1zyx
\1basX: dc.l 0
\1NamX: dc.b "\1.library",0
even
\1zyx:
EndM
DefEnd: Macro
move.l #-1,(a5)
rts
EndM
LibBase: Macro
move.l \1basX(pc),a6
EndM
TaskName: Macro
move.l $4.w,a6
jsr -132(a6)
move.l zyxTask(pc),a0
move.l #.TaskN,10(a0)
jsr -138(a6)
bra.b .zyxTsk
.TaskN: dc.b \1
dc.b 0
even
.zyxTsk:
EndM
TaskPri: Macro
move.l $4.w,a6
move.l zyxTask(pc),a1
moveq #\1,d0
jsr -300(a6)
EndM
TaskPointer: Macro
move.l zyxTask(pc),d0
EndM
StartFrom: Macro
move.l RtnMess(pc),d0
EndM
NextArg: Macro
move.l zyxArgP(pc),d0
beq.b .noA\@
move.l d0,a0
bsr.w zyxGArg
move.l a0,zyxArgP
.noA\@ tst.l d0
EndM
DebugDump MACRO
IFD DODUMP
.StartDump\@:
movem.l d0-d7/a0-a6,-(sp)
move.l zyxDosBase(pc),a6
jsr -60(a6)
move.l d0,d1
bne.b .ok\@
move.l zyxHandle(pc),d1
beq.b .debEnd\@
.ok\@ move.l #.string\@,d2
move.l #.stringSize\@,d3
jsr -48(a6)
bra.b .debEnd\@
.string\@ dc.b "DEBUG DUMP: ",27,"[1m",\1,27,"[0m",10
.stringSize\@ = *-.string\@
even
.debEnd\@ btst #2,$dff016
bne.b .debEnd\@
.hold\@ btst #2,$dff016
beq.b .hold\@
movem.l (sp)+,d0-d7/a0-a6
ENDC
ENDM
InitDebugHandler: MACRO
IFD DODUMP
tst.l zyxHandle
bne.b .exit
move.l zyxDosBase(pc),a6
jsr -60(a6)
move.l d0,zyxHandle
bne.b .exit
st zyxDebugHand
move.l #.Dhand,d1
move.l #1006,d2
jsr -30(a6)
move.l d0,zyxHandle
bra.b .exit
IFC '\1',''
.Dhand dc.b "CON:0/20/640/160/Debug Dump/CLOSE/WAIT",0
ENDC
IFNC '\1',''
.Dhand dc.b \1,0
ENDC
even
.exit
ENDC
ENDM
InitArg MACRO
move.l #\1,zyxArgP
ENDM
InitArgs MACRO
move.l \1,zyxArgP
ENDM
Version: Macro ;obsolete!
NOP
EndM
GoZYX: move.l a0,-(sp)
move.l d0,zyxArgL
move.l a0,zyxArgP
move.l $4.w,a6
move.l a6,execbasX
move.l #zyxBufZ,d0
moveq #1,d1
jsr -198(a6)
move.l d0,zyxBuff
beq.w .DOS
lea zyxDos(pc),a1
moveq.l #0,d0
jsr -552(a6)
move.l d0,zyxDosBase
beq.w .DOS
sub.l a1,a1
jsr -294(a6)
move.l d0,a4
move.l d0,zyxTask
tst.l 172(a4)
bne.b .chkPro
moveq #StartSkip,d0
bne.b .chkPro
lea 92(a4),a0
jsr -384(a6)
lea 92(a4),a0
jsr -372(a6)
move.l d0,RtnMess
.chkPro:
move.w 296(a6),d5
IFD CPUCHECK
move.l #Processor,d7
beq.w .ProOk
cmp.w #60,d7
ble.w .nxPro1
sub.l #68000,d7
beq.w .ProOk
.nxPro1:
cmp.b #10,d7
bne.b .nxPro2
and.b #$cf,d5
bne.w .ProOk
bra.w .ProErr
.nxPro2:
cmp.b #20,d7
bne.b .nxPro3
and.b #$ce,d5
bne.w .ProOk
bra.b .ProErr
.nxPro3:
cmp.b #30,d7
bne.b .nxPro4
and.b #$cc,d5
bne.b .ProOk
bra.b .ProErr
.nxPro4:
cmp.b #40,d7
bne.b .nxPro5
and.b #$c8,d5
bne.b .ProOk
bra.b .ProErr
.nxPro5:
cmp.b #60,d7
bne.b .ProWho
btst #7,d5
beq.b .ProErr
btst #6,d5
bne.b .ProOk
bra.b .ProErr
.ProWho:
lea ProcWho(pc),a0
move.l #Processor,ProcNum
lea ProcNum(pc),a1
bsr.w zyxPrt
bra.w .End
.ProErr:
st zyxLR
lea ProcErr(pc),a0
add.l #68000,d7
move.l d7,ProcNum
lea ProcNum(pc),a1
bsr.w zyxPrt
ENDC
.ProOk: IFD MATHCHECK
move.l #MathProc,d7
beq.w .MathOk
sub.l #68000,d7
cmp.w #881,d7
bne.b .Math2
and.b #$70,d5
bne.b .MathOk
bra.b .MathEr
.Math2: cmp.w #882,d7
bne.b .Math3
and.b #$60,d5
bne.b .MathOk
bra.b .MathEr
.Math3: cmp.b #60,d7
beq.b .m60ok
cmp.b #40,d7
bne.b .MathEr
.m60ok btst #6,d5
bne.b .MathOk
.MathEr:
st zyxLR
lea ProcErr(pc),a0
move.l #MathProc,ProcNum
lea ProcNum(pc),a1
bsr.w zyxPrt
ENDC
.MathOk:
bsr.w zyxLibO
tst.b zyxLR
bne.b .noShow
move.l zyxArgP(pc),a0
move.l zyxArgL(pc),d0
bsr.w Start
move.l d0,zyxVal
.noShow:
bsr.w zyxLibC
.End: move.l zyxBuff(pc),d0
beq.b .noBuff
move.l d0,a1
move.l #zyxBufZ,d0
jsr -210(a6)
IFD DODUMP
tst.b zyxDebugHand
beq.b .none
move.l zyxDosBase(pc),a6
move.l zyxHandle(pc),d1
beq.b .none
jsr -36(a6)
.none move.l $4.w,a6
ENDC
move.l zyxDosBase(pc),a1
jsr -414(a6)
.noBuff:
tst.l RtnMess
beq.w .DOS
jsr -132(a6)
move.l RtnMess(pc),a1
jsr -378(a6)
.DOS: move.l (sp)+,a0
move.l zyxVal(pc),d0
rts
zyxDo: move.b d0,(a3)+
rts
zyxPrt: movem.l d0-a6,-(sp)
lea zyxDo(pc),a2
move.l zyxBuff(pc),a3
jsr -522(a6)
move.l zyxDosBase(pc),a6
jsr -60(a6)
move.l d0,d1
beq.b .clDos
move.l zyxBuff(pc),d2
move.l d2,a0
moveq #0,d3
.count: addq #1,d3
tst.b (a0)+
bne.b .count
subq #1,d3
jsr -48(a6)
.clDos: lea (a6),a1
move.l $4.w,a6
jsr -414(a6)
.exit: movem.l (sp)+,d0-a6
rts
zyxLibO:
move.l #4*3*zyxMax,d0
moveq #1,d1
jsr -198(a6)
move.l d0,zyxMem
beq.b .memErr
move.l d0,a5
bsr.w Init
rts
.memErr:
lea zyxFR(pc),a0
lea zyxMeR(pc),a1
bsr.w zyxPrt
st zyxLR
rts
zyxLibC:
move.l $4.w,a6
move.l zyxMem(pc),d0
beq.w .noLibs
move.l d0,a5
.loop: cmp.l #-1,(a5)
beq.b .clEnd
move.l 8(a5),d0
beq.b .noCl
move.l d0,a1
jsr -414(a6)
.noCl: lea 12(a5),a5
bra.b .loop
.clEnd: move.l zyxMem(pc),a1
move.l #4*3*zyxMax,d0
jsr -210(a6)
.noLibs:
rts
zyxLibR:
st zyxLR
lea zyxLib(pc),a0
lea zyxNx(pc),a1
bsr.w zyxPrt
rts
zyxGArg:
move.b (a0)+,d0
beq.w .end
cmp.b #10,d0
beq.w .end
cmp.b #9,d0
beq.b zyxGArg
cmp.b #32,d0
beq.b zyxGArg
move.l zyxBuff(pc),a1
lea -1(a0),a0
.copy: move.b (a0)+,d0
beq.b .stop
cmp.b #10,d0
beq.b .stop
cmp.b #32,d0
beq.b .eol
.cont: cmp.b #'*',d0
beq.b .chkSpc
cmp.b #'"',d0
beq.b .toggle
.noChk: move.b d0,(a1)+
.cont2: bra.b .copy
.chkSpc:
cmp.b #'"',(a0)
bne.b .chk2
move.b #'"',(a1)+
lea 1(a0),a0
bra.b .copy
.chk2: cmp.b #'n',(a0)
bne.b .noChk
move.b #10,(a1)+
lea 1(a0),a0
bra.b .copy
.toggle:
tst.b zyxQ
beq.b .set
sf zyxQ
bra.b .stop
.set: st zyxQ
bra.b .cont2
.eol: tst.b zyxQ
bne.b .cont
.stop: tst.b zyxQ
bne.b .end
clr.b (a1)
move.l zyxBuff(pc),d0
rts
.end: moveq #0,d0
rts
RtnMess: dc.l 0
ProcNum: dc.l 0
execbasX: dc.l 0
zyxArgL: dc.l 0
zyxArgP: dc.l 0
zyxVal: dc.l 0
zyxMem: dc.l 0
zyxNx: dc.l 0
zyxVx: dc.l 0
IFD DODUMP
zyxHandle: dc.l 0
ENDC
zyxDosbase dc.l 0
zyxTask: dc.l 0
zyxBuff: dc.l 0
zyxMeR: dc.l zyxMemR
IFD DODUMP
zyxDebugHand: dc.b 0
ENDC
zyxLR: dc.b 0
zyxQ: dc.b 0
zyxDos: dc.b 'dos.library',0
zyxLib: dc.b "Can't open %s v. %ld",10,0
zyxMemR: dc.b 'Low memory!',10,0
zyxFR: dc.b '%s',0
ProcWho: dc.b 'Right! %ld ?',10,0
ProcErr: dc.b 'Need %ld or better!',10,0
even